# Разработка форм с помощью Django
from django import forms
from .models import Comment

# Мы определили первую форму Django. Форма EmailPostForm наследует от
# базового класса Form.
class EmailPostForm(forms.Form): 
    name = forms.CharField(max_length=25)
    email = forms.EmailField()
    to = forms.EmailField()
    comments = forms.CharField(required=False,
                            widget=forms.Textarea)

# Форма содержит следующие ниже поля:
# •• name: экземпляр класса CharField с максимальной длиной 25 символов,
# который будет использоваться для имени человека, отправляющего
# пост;
# •• email: экземпляр класса EmailField. Здесь используется адрес электрон-
# ной почты человека, отправившего рекомендуемый пост;
# •• to: экземпляр класса EmailField. Здесь используется адрес электронной
# почты получателя, который будет получать электронное письмо с ре-
# комендуемым постом;
# •• comments: экземпляр класса CharField. Он используется для коммента-
# риев, которые будут вставляться в электронное письмо с рекомендуе-
# мым постом. Это поле сделано опциональным путем установки required
# равным значению False, при этом был задан конкретно-прикладной
# виджет прорисовки поля.

# Работа с формами в представлениях
# Мы определили форму для рекомендации постов по электронной почте. Те-
# перь требуется представление, чтобы создавать экземпляр формы и работать
# с передачей формы на обработку.
# Отредактируйте файл views.py приложения blog, добавив следующий далее
# исходный код...

# - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Создание форм из моделей
# Далее необходимо скомпоновать форму, позволяющую пользователям ком-
# ментировать посты блога. Напомним, что в Django есть два базовых класса,
# которые можно использовать для создания форм: Form и ModelForm. Мы ис-
# пользовали класс Form, чтобы предоставлять пользователям возможность
# делиться постами по электронной почте. Теперь мы будем использовать
# ModelForm, чтобы воспользоваться преимуществами существующей модели
# Comment и компоновать для нее форму динамически.

class CommentForm(forms.ModelForm):
    class Meta:
        model = Comment #  модель, для которой следует компоновать форму
        fields = ['name', 'email', 'body'] # поля, которые следует включать в форму

        # Для того чтобы создать форму из модели, надо в Meta-классе формы просто
        # указать модель, для которой следует компоновать форму. Django проведет
        # интроспекцию модели и динамически скомпонует соответствующую форму.
        # Каждому типу поля модели соответствует заранее заданный тип поля фор-
        # мы. Атрибуты полей модели учитываются при валидации формы. По умолча-
        # нию Django создает поле формы для каждого содержащегося в модели поля.
        # Однако, используя атрибут fields, можно сообщать поля, которые следует
        # включать в форму, либо, используя атрибут exclude, сообщать поля, которые
        # следует исключать, задавая поля в явном виде. В форме CommentForm мы вклю-
        # чили поля name, email и body

        # Далее отредактируйте файл views.py приложения blog, добавив следующий далее
        # исходный код...

# - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Полнотекстовый поиск. Разработка представления поиска
class SearchForm(forms.Form):
    query = forms.CharField()
    # Поле запроса будет использоваться для того, чтобы давать пользователям
    # возможность вводить поисковые запросы. Отредактируйте файл views.py